<?php

namespace app\common\lib;

class Check
{
    /**
     * 判断邮箱是否正确
     * @param $email
     * @return bool
     */
    public function checkEmail($email) {
        return (bool)filter_var($email, FILTER_VALIDATE_EMAIL);
    }

    /**
     * 判断链接前缀
     * @return string
     */
    public function checkUrlPrefix(){
        $protocol = request()->isSsl() ? 'https://' : 'http://';
        return $protocol . request()->host();
    }

    /**
     * 判断链接前缀返回带链接的文件
     * @return string
     */
    public function checkUrl($url){
        $protocol = request()->isSsl() ? 'https://' : 'http://';
        $prefix = $protocol . request()->host();
        return $this->makeCompleteUrl($url,$prefix);
    }

    /**
     * 如果不是完整URL，则加上前缀
     * @param $url
     * @param $prefix
     * @return mixed|string
     */
    public function makeCompleteUrl($url, $prefix) {
        if (!$this->isCompleteUrl($url)) {
            return $prefix . $url;
        }
        return $url;
    }

    /**
     * 使用正则表达式检查是否包含协议部分
     * @param $url
     * @return false|int
     */
    public function isCompleteUrl($url) {
        return preg_match('~^(?:https?|ftp)://~i', $url);
    }

    /**
     * 生成订单编号
     * @return string
     */
    public function makeOrderNo()
    {
        $yCode = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z');
        $orderSn =
            $yCode[intval(date('Y')) - 2024] . $yCode[intval(date('Y')) - 2023] . date("Ymd",time()) . strtoupper(dechex(date('m'))) . date(
                'd') . substr(time(), -5) . substr(microtime(), 2, 5) . sprintf(
                '%02d', rand(0, 99));
        return $orderSn;
    }

    /**
     * 生成售后订单编号
     * @return string
     */
    public function makeRefundOrderNo()
    {
        $orderSn =
            "RE". date("Ymd",time()) . strtoupper(dechex(date('m'))) . date(
                'd') . substr(time(), -5) . substr(microtime(), 2, 5) . sprintf(
                '%02d', rand(0, 99));
        return $orderSn;
    }

    /**
     * 生成唯一核销码
     * @return string
     */
    public function generateUniqueCode(){
        // 使用时间戳和随机数生成唯一码
        $uniqueCode =
             strtoupper(dechex(date('m'))) . date(
                'd') . substr(time(), -5) . substr(microtime(), 2, 5) . sprintf(
                '%02d', rand(0, 99));
        return $uniqueCode;
        //return md5(uniqid(mt_rand(), true));
    }

    /**
     * 备份远程数据库到本地
     */
    public function backupRemoteDatabase()
    {
        // 假设你已经在配置文件中设置了数据库连接信息
        // 或者你可以使用环境变量来获取这些信息
        $remoteDbUser = 'root'; // 远程数据库用户名
        $remoteDbPassword = ''; // 远程数据库密码（注意：不要在代码中硬编码密码！）
        $remoteDbHost = '117.78.9.200'; // 远程数据库主机名
        $remoteDbName = 'ruoyi_test'; // 远程数据库名
        $backupFilePath = 'D:/phpstudy_pro/ibutler/PHP/cultural-TP6/public/static/sql/ruoyi_test.sql'; // 本地备份文件路径

        // 构建mysqldump命令
        $command = "mysqldump --user={$remoteDbUser} --password={$remoteDbPassword} -h {$remoteDbHost} {$remoteDbName} > {$backupFilePath}";
        // 执行命令并捕获输出和返回状态
        exec($command, $output, $returnVar);

        // 根据返回状态处理结果
        if ($returnVar === 0) {
            // 备份成功
            return show(config("status.success"),"Database backup succeeded.");
        } else {
            // 备份失败
            return show(config("status.error"),'Remote database backup failed with output: ' . implode("\n", $output));
        }
    }

    /**
     * 后台管理获取订单详情展示图片
     * @return string
     */
    public function getOrderIcon(){
        return '';
    }
}
